package com.divemotor.ventarepuestosinternet.controller;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;

import com.divemotor.ventarepuestosinternet.beans.adapter.CotizacionAdapter;
import com.divemotor.ventarepuestosinternet.beans.adapter.DataAdapter;
import com.divemotor.ventarepuestosinternet.beans.adapter.ElementoCotizacionAdapter;
import com.divemotor.ventarepuestosinternet.beans.form.CotizacionBeanForm;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.service.CotizacionService;
import com.divemotor.ventarepuestosinternet.service.EstadoCotizacionService;
import com.divemotor.ventarepuestosinternet.service.SucursalService;
import com.divemotor.ventarepuestosinternet.util.Constantes;
import com.divemotor.ventarepuestosinternet.util.DatosDeSession;
import com.divemotor.ventarepuestosinternet.util.FacesContextUtil;

@ManagedBean(name="historialCotizacionesController")
@ViewScoped
public class HistorialCotizacionesController implements Serializable {

	private static final Logger logger = Logger.getLogger(HistorialCotizacionesController.class);
	
	private static final long serialVersionUID = -1306581190110153623L;

	@ManagedProperty(value = "#{estadoCotizacionService}")
	private EstadoCotizacionService estadoCotizacionService;
	@ManagedProperty(value = "#{sucursalService}")
	private SucursalService sucursalService;
	@ManagedProperty(value = "#{cotizacionService}")
	private CotizacionService cotizacionService;
	@ManagedProperty(value = "#{loginController}")
	private LoginController loginController;
	
	private List<DataAdapter> listaSucursales;
	private List<DataAdapter> listaEstadosCotizacion;
	private List<CotizacionAdapter> listaCotizaciones;
	private CotizacionAdapter cotizacionSeleccionada;
	private List<ElementoCotizacionAdapter> listarElementoCotizacionesAdapter;
	private CotizacionBeanForm cotizacionBeanForm;

	public HistorialCotizacionesController() {
		logger.info("HistorialCotizacionesController");
	}

	@PostConstruct
	private void init(){
		logger.info("PostConstruct");
		try {
			cotizacionBeanForm 		= new CotizacionBeanForm();
			cotizacionBeanForm.setIdUsuario(loginController.getIdUsuario());
			listaSucursales			= sucursalService.listarSucursalesAdapter();
			listaEstadosCotizacion 	= estadoCotizacionService.listarEstadosAdapter();
			cargaData();
		} catch (DivemotorBusinessException e) {
			logger.error("EX* init: " + e.getMessage());
		}
	}
	
	public void cargaData(){
		buscarCotizaciones();
	}
	
	public void limpiarBusqueda(){
		cotizacionBeanForm.limpiarForm();
		listaCotizaciones	= null;
	}
	
	public void buscarCotizaciones(){
		try {
			cotizacionBeanForm.setIdUsuario(DatosDeSession.obtenerUsuarioAutenticado().getIdUsuario());
			listaCotizaciones = cotizacionService.buscarCotizacionPorUsuarioAutenticado(cotizacionBeanForm);
		} catch (Exception e) {
			logger.error("EX* buscarCotizaciones Exception: " + e.getMessage());
			RequestContext.getCurrentInstance().addCallbackParam("ocurrioError", true);
			FacesContextUtil.error(Constantes.MSJ_ERROR_SISTEMA);
		}
	}
	
	public void seleccionarCotizacionHistorial(CotizacionAdapter cotizacion){
		try {
			cotizacionSeleccionada 	  		  = cotizacion;
			listarElementoCotizacionesAdapter = cotizacionService.obtenerDetalleCotizacionAdapter(cotizacionSeleccionada.getIdCotizacion());
		} catch (Exception e) {
			logger.error("EX* seleccionarCotizacionHistorial Exception: " + e.getMessage());
			RequestContext.getCurrentInstance(). addCallbackParam("ocurrioError", true);
			FacesContextUtil.error(Constantes.MSJ_ERROR_SISTEMA);
		}
	}

	public void setEstadoCotizacionService(EstadoCotizacionService estadoCotizacionService) {
		this.estadoCotizacionService = estadoCotizacionService;
	}

	public void setSucursalService(SucursalService sucursalService) {
		this.sucursalService = sucursalService;
	}

	public void setCotizacionService(CotizacionService cotizacionService) {
		this.cotizacionService = cotizacionService;
	}
	
	public List<DataAdapter> getListaSucursales() {
		return listaSucursales;
	}

	public void setListaSucursales(List<DataAdapter> listaSucursales) {
		this.listaSucursales = listaSucursales;
	}

	public List<DataAdapter> getListaEstadosCotizacion() {
		return listaEstadosCotizacion;
	}

	public void setListaEstadosCotizacion(List<DataAdapter> listaEstadosCotizacion) {
		this.listaEstadosCotizacion = listaEstadosCotizacion;
	}

	public List<CotizacionAdapter> getListaCotizaciones() {
		return listaCotizaciones;
	}

	public void setListaCotizaciones(List<CotizacionAdapter> listaCotizaciones) {
		this.listaCotizaciones = listaCotizaciones;
	}

	public CotizacionAdapter getCotizacionSeleccionada() {
		return cotizacionSeleccionada;
	}

	public void setCotizacionSeleccionada(CotizacionAdapter cotizacionSeleccionada) {
		this.cotizacionSeleccionada = cotizacionSeleccionada;
	}

	public List<ElementoCotizacionAdapter> getListarElementoCotizacionesAdapter() {
		return listarElementoCotizacionesAdapter;
	}

	public void setListarElementoCotizacionesAdapter(List<ElementoCotizacionAdapter> listarElementoCotizacionesAdapter) {
		this.listarElementoCotizacionesAdapter = listarElementoCotizacionesAdapter;
	}

	public void setLoginController(LoginController loginController) {
		this.loginController = loginController;
	}

	public CotizacionBeanForm getCotizacionBeanForm() {
		return cotizacionBeanForm;
	}

	public void setCotizacionBeanForm(CotizacionBeanForm cotizacionBeanForm) {
		this.cotizacionBeanForm = cotizacionBeanForm;
	}
	
}
